package com.atguigu.vodservice.service.impl;

import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.vod.upload.req.UploadStreamRequest;
import com.aliyun.vod.upload.resp.UploadStreamResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.vod.model.v20170321.DeleteVideoRequest;
import com.atguigu.vodservice.service.VodService;
import com.atguigu.vodservice.utils.ConstantPropertiesUtil;
import com.atguigu.vodservice.utils.InitVodObject;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

@Service
public class VodServiceImpl implements VodService {
    //上传视频
    @Override
    public String uploadVideoAli(MultipartFile file) {
        try {
            //title      01
            //fileName   01.00.009.mp4
            //inputStream
            String fileName = file.getOriginalFilename();
            String title = fileName.substring(0,fileName.lastIndexOf("."));
            InputStream inputStream = file.getInputStream();
            UploadStreamRequest request = new UploadStreamRequest(ConstantPropertiesUtil.ACCESS_KEY_ID,
                    ConstantPropertiesUtil.ACCESS_KEY_SECRET, title, fileName, inputStream);

            UploadVideoImpl uploader = new UploadVideoImpl();
            UploadStreamResponse response = uploader.uploadStream(request);
            String videoId = null;
            if (response.isSuccess()) {
                videoId = response.getVideoId();
            } else { //如果设置回调URL无效，不影响视频上传，可以返回VideoId同时会返回错误码。其他情况上传失败时，VideoId为空，此时需要根据返回错误码分析具体错误原因
                videoId = response.getVideoId();
            }
            return videoId;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    //删除视频
    @Override
    public void removeVideoAliyun(String videoId) {
        try {
            //1 创建初始化对象
            DefaultAcsClient client =
                    InitVodObject.initVodClient(ConstantPropertiesUtil.ACCESS_KEY_ID, ConstantPropertiesUtil.ACCESS_KEY_SECRET);
            //2 创建DeleteVideoRequest
            DeleteVideoRequest request = new DeleteVideoRequest();
            //3 向request设置视频id
            request.setVideoIds(videoId);
            //4 调用初始化对象的方法
            client.getAcsResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }

    //删除多个视频
    @Override
    public void removeBatchVideoIds(List<String> videoIdsList) {
        try {
            //1 创建初始化对象
            DefaultAcsClient client =
                    InitVodObject.initVodClient(ConstantPropertiesUtil.ACCESS_KEY_ID, ConstantPropertiesUtil.ACCESS_KEY_SECRET);
            //2 创建DeleteVideoRequest
            DeleteVideoRequest request = new DeleteVideoRequest();

            //3 向request设置视频id
            //因为现在传递参数是list集合，包含多个视频id
            //把多个id使用逗号隔开
            String ids = StringUtils.join(videoIdsList.toArray(), ",");
            request.setVideoIds(ids);

            //4 调用初始化对象的方法
            client.getAcsResponse(request);
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }

    //测试把list集合值获取出来，使用逗号隔开
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("11");
        list.add("22");
        list.add("33");

        String join = StringUtils.join(list.toArray(), ",");
        System.out.println(join);

    }
}
